Software system architectures typically provide application software, operating system software, and possibly utility software. The operating system provides a set of known resources for the applications, and thus allows a software application writer to generate a program which relies on a standardized interface to the hardware, other applications, and the environment. Utility software may be designed to interact with an application, and may modify the way that it operates. An example is a macro recorder and playback utility, which records and recreates user interface inputs, to allow automated control of a software application.